home *** CD-ROM | disk | FTP | other *** search
/ PC Plus SuperCD (UK) 1997 February / PC Plus Super CD (Issue 124) (PCP124-2-97) (February 1997).iso / handson / handson.exe / OUTL2.PAS < prev    next >
Encoding:
Pascal/Delphi Source File  |  1996-10-14  |  4.3 KB  |  159 lines

  1. unit Outl2;
  2. { PC PLUS sample Outliner program.
  3.  
  4. Demonstrates how to use Delphi's outline object to create a collapsible
  5. outliner. Lets you add and delete items and save/load outlines to/from disk }
  6.  
  7. interface
  8.  
  9. uses
  10.   SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
  11.   Forms, Dialogs, Grids, Outline, ExtCtrls, StdCtrls, Menus;
  12.  
  13. type
  14.   TForm1 = class(TForm)
  15.     Panel1: TPanel;
  16.     Outline1: TOutline;
  17.     ItemTextEd: TEdit;
  18.     AddItemBtn: TButton;
  19.     DelBtn: TButton;
  20.     OpenDialog1: TOpenDialog;
  21.     SaveDialog1: TSaveDialog;
  22.     MainMenu1: TMainMenu;
  23.     FileMenu: TMenuItem;
  24.     OpenMenuItem: TMenuItem;
  25.     NewMenuItem: TMenuItem;
  26.     SaveMenuItem: TMenuItem;
  27.     SaveAsMenuItem: TMenuItem;
  28.     ExitMenuItem: TMenuItem;
  29.     procedure AddItemBtnClick(Sender: TObject);
  30.     procedure DelBtnClick(Sender: TObject);
  31.     procedure Outline1Click(Sender: TObject);
  32.     procedure ExitMenuItemClick(Sender: TObject);
  33.     procedure NewMenuItemClick(Sender: TObject);
  34.     procedure SaveMenuItemClick(Sender: TObject);
  35.     procedure SaveAsMenuItemClick(Sender: TObject);
  36.     procedure OpenMenuItemClick(Sender: TObject);
  37.   private
  38.     { Private declarations }
  39.   public
  40.     { Public declarations }
  41.   end;
  42.  
  43. var
  44.   Form1: TForm1;
  45.  
  46. implementation
  47.  
  48. {$R *.DFM}
  49.  
  50. function ConfirmFileSave(FileName : string) : boolean;
  51. begin
  52.     if MessageDlg(FileName + ' already exists. Save anyway?',
  53.                         mtConfirmation, mbYesNoCancel, 0)
  54.                         = mrYes then
  55.       ConfirmFileSave := true
  56.     else
  57.       ConfirmFileSave := false;
  58. end;
  59.  
  60. procedure TForm1.AddItemBtnClick(Sender: TObject);
  61. { Adds text from ItemTextEd text box to the outline as a 'child' item -
  62.   that is, an item indented one level }
  63. var
  64.    ItemText : string;
  65. begin
  66.   ItemText := ItemTextEd.Text;
  67.   If ItemText = '' then
  68.       MessageDlg('You must enter text for this item!', mtInformation,
  69.       [mbOk], 0)
  70.   else
  71.   If Outline1.Lines.Count = 0 then
  72.      Outline1.Add(0,ItemText)
  73.   else
  74.   begin
  75.      Outline1.AddChild(Outline1.SelectedItem, ItemText );
  76.      { expand selected item so you can see your new subitem }
  77.      Outline1[Outline1.SelectedItem].Expanded := true;
  78.      { move highlight to new subitem }
  79.   end;
  80.      { give focus to text edit box }
  81.   ActiveControl:= ItemTextEd;
  82.  end;
  83.  
  84. procedure TForm1.DelBtnClick(Sender: TObject);
  85. { Deletes the current item and all child items beneath it.
  86.   You may want to add a Yes/No message box to let the user
  87.   confirm this deletion }
  88. begin
  89.    If Outline1.SelectedItem > 0 then
  90.       Outline1.Delete(Outline1.SelectedItem);
  91.      { give focus to text edit box }
  92.   ActiveControl:= ItemTextEd;
  93. end;
  94.  
  95. procedure TForm1.Outline1Click(Sender: TObject);
  96. { Just to see how items are indexed, try clicking the
  97.   outline. The index will be displayed in the Form Caption }
  98. begin
  99.   Caption := '[Selected item index: ' + IntToStr(Outline1.SelectedItem) + ']';
  100.      { give focus to text edit box }
  101.   ActiveControl:= ItemTextEd;
  102. end;
  103.  
  104. procedure TForm1.ExitMenuItemClick(Sender: TObject);
  105. begin
  106.   Close;
  107. end;
  108.  
  109. procedure TForm1.NewMenuItemClick(Sender: TObject);
  110. begin
  111.   Outline1.Clear;
  112.   OpenDialog1.FileName := '*.otl';
  113. end;
  114.  
  115. { Some basic File Saving and Opening procedures }
  116. procedure TForm1.SaveAsMenuItemClick(Sender: TObject);
  117. var
  118.    SaveFile : boolean;
  119. begin
  120.    SaveFile := true;
  121.    with SaveDialog1 do
  122.     if Execute then
  123.     begin
  124.       if FileExists(FileName) then
  125.          SaveFile := ConfirmFileSave(FileName);
  126.       If SaveFile then
  127.       begin
  128.          Outline1.Lines.SaveToFile(Filename);
  129.          OpenDialog1.Filename := Filename;
  130.       end;
  131.     end;
  132. end;
  133.  
  134.  
  135. procedure TForm1.SaveMenuItemClick(Sender: TObject);
  136. begin
  137.   if ((OpenDialog1.Filename = '') or (OpenDialog1.Filename = '*.otl')) then
  138.     SaveAsMenuItemClick(Sender)
  139.   else
  140.     Outline1.Lines.SaveToFile(OpenDialog1.Filename);
  141. end;
  142.  
  143.  
  144. procedure TForm1.OpenMenuItemClick(Sender: TObject);
  145. begin
  146.   with OpenDialog1 do
  147.     if Execute then
  148.     begin
  149.       if FileExists(FileName) Then
  150.           Outline1.Lines.LoadFromFile(FileName)
  151.       else
  152.         MessageDlg('Sorry. Can''t load this file. '+ FileName +
  153.                            ' does not exist!',
  154.                         mtInformation, [mbOK], 0);
  155.     end;
  156. end;
  157.  
  158. end.
  159.